OpenMetadata SaaSのSnowflake Connectorを試してみた
さがらです。
OpenMetadata SaaSで、Snowflakeのメタデータを抽出するためのSnowflake Connectorを試してみたので、本記事でまとめてみます。
前提
基本的には、このドキュメントの手順に沿って行っていきます。
また、「OpenMetadata SaaS」とは言っていますが、中身はOSSのOpenMetadataと全く一緒です。クラスタの構築や運用周りをすべて担ってくれるのがSaaS版となっております。
OpenMetadata SaaSのフリートライアル開始手順については、こちらのブログをご覧ください。
各製品のバージョン
- OpenMetadata SaaS
- Tokyoリージョン
- OpenMetadata
- 0.13.2
- Snowflake
- 7.3.2
- AWS、Tokyoリージョン、Enterpriseエディション
Snowflake上での事前準備
OpenMetadataから正確にメタデータを抽出するために、OpenMetadataの認証に使うユーザーに対して適切な権限を与える必要があります。
OpenMetadataのバージョン0.13.2時点では、以下の情報が必要となります。
- メタデータ抽出に使用するウェアハウスに対する
USAGE
- メタデータを抽出したいデータベースに対する
USAGE
- メタデータを抽出したいスキーマに対する
USAGE
- メタデータを抽出したいテーブルに対する
SELECT
snowflake.account_usage.query_history
とsnowflake.account_usage.tag_references
をクエリするための、SNOWFLAKE
データベースに対するIMPORTED PRIVILEGES
- 2023年2月3日時点、Database Roleがパブリックプレビューとなっているため、こちらを用いるのもよいかもしれません。
また、これらの権限を付与するためのサンプルクエリは公式Docに載っていますので、ぜひ参考にしてみてください。
OpenMetadata上でのConnectorの設定
では、OpenMetadata上からSnowflake Connectorの設定をしていきます!
まず、Settings
➟Databases
➟Add New Database Service
を順番に押します。
接続先の一覧からSnowflake
を選択し、Next
を押します。
Service Name
とDescription
を記入し、Next
を押します。
続いて、Snowflakeに接続するための各種情報を入力する画面が出てきます。ユーザー名とパスワードで登録する場合には、以下の情報が関わってきます。
Username
:Snowflakeの認証に用いるユーザー名を記入Password
:対象ユーザーのパスワードを記入Account
:xyz1234.us-east-1.gcp
の形式で、アカウント名を記入Role
:OpenMetadataがメタデータの取得を行う際に、使用するロールを記入Database
:もし特定の1つのデータベースだけ同期させたい場合には、ここにデータベース名を記入。記入しないと、対象のロールが読み取れるすべてのデータベースが同期対象となるWarehouse
:OpenMetadataがメタデータの取得を行う際に、使用するウェアハウスを記入Query Tag
:OpenMetadataからメタデータの取得を行う際に発行されるQuery Tagを指定したい場合は記入(セッション中にQuery Tagの値を切り替えられる権限を持つロールでないといけません)
これらの情報を入力したら、末尾にあるTest Connection
を押しましょう。接続が問題なければConnection test was successful
と出てきます。
接続に問題なければ、Save
を押します。
これでコネクタは完成ですが、続けてIngestion、つまりはメタデータの抽出に関する設定を行う必要があります。Add ingestion
を押します。
すると、Ingestionに関する情報の入力画面が出てきます。オプションとしては、このようなものがあります。
Name
:この抽出処理の名称を入力、このOpenMetadataのアカウント内でユニークである必要がありますDatabase/Schema/Table Filter Pattern
:正規表現で抽出対象のオブジェクトを絞り込めるInclude Views
:Viewも抽出対象に含めるかを切り替えるInclude Tags
:Snowflake上で定義されたタグも抽出対象に含めるかを切り替えるMark Deleted Tables
:抽出対象のテーブルが削除されていたら、OpenMetadata上でも削除するかどうかを切り替える
これらの設定を終えたら、右下のNext
を押します。
続いて、抽出のスケジュールを選択します。設定を終えたら、Add & Deploy
を押します。
下図のように表示されたら、抽出の設定は完了です!
ちなみに、対象のIngestionsを手動実行することも出来ます。対象のIngestionのActions
列にてRun
を押せばOKです!
一度Ingestionをしてみたところ、XSのシングルクラスタウェアハウスを用いて、863個のテーブル・ビューの取得に11分ほどかかりました!これはProfilerなど別機能を実行すると更に時間がかかることが想定されます。
Snowflake特有のメタデータをOpenMetadata上で確認してみる
少しだけ、どのようにSnowflake特有のメタデータがOpenMetadataから見ることができるか、確認してみます。他のDWHでも共通となる各テーブルレベルでどういったメタデータを見ることが出来るかは、こちらのブログや、OpenMetadataのSandboxも参考にしてみてください。
Snowflakeのタグ
Snowflakeにはタグの機能があるのですが、OpenMetadataではSnowflake上で定義されたタグを同期することが出来ます。
実際には、下記のように連携されることが確認できました。Classificationは複数の類似したTagをひとまとめに出来る概念です。
- Snowflakeのタグの
TAG NAME
は、OpenMetadata上のClassification
として連携される - Snowflakeのタグの
TAG VALUE
は、OpenMetadata上のTag
として連携される
INFORMATION_SCHEMAの扱い
まず気づいた点として、19個のデータベースが同期されたのですが、すべてのデータベースのINFORMATION_SCHEMA
も対象であったため、データカタログ上不要なテーブル・ビューがたくさん同期されていました。
Ingestionの設定で対象のスキーマを絞り込むことができるので、INFORMATION_SCHEMA
は除外するのが良さそうですね!
最後に
OpenMetadata SaaSで、Snowflakeのメタデータを抽出するためのSnowflake Connectorを試してみました。
INFORMATION_SCHEMA
など抽出対象は注意しないといけないですが、SnowflakeのタグについてTAG NAME
とTAG VALUE
どちらも取得でき、かつ元の階層関係のまま連携できるのは良いなと感じました!